// models/cell.model.ts
import { StyleDefinition } from './style.model';
import { ContentDefinition, TextContent } from './content.model'; // 默认TextContent

/**
 * 单个单元格的定义
 */
export class CellDefinition {
  /** 单元格所在行索引 (0-based) */
  rowIndex: number;
  /** 单元格所在列索引 (0-based) */
  colIndex: number;
  /** 单元格跨的行数 */
  rowSpan: number = 1;
  /** 单元格跨的列数 */
  colSpan: number = 1;
  /** 单元格特定宽度 (可选, 覆盖列定义) */
  width: number;
  /** 单元格特定高度 (可选, 覆盖行定义) */
  height: number;
  /** 单元格样式 */
  style: StyleDefinition = new StyleDefinition();
  /** 单元格内容定义 */
  content?: ContentDefinition = new TextContent({ staticText: '' }); // 默认是空文本
  /**
   * 如果内容关联数据元模型，这里指定字段的 `field` 值
   * e.g., "cod" for "工单编码"
   */
  dataMetaModelField?: string;

  /** 是否为被合并的单元格 (非左上角) */
  isMergedSlave: boolean = false;
  /** 如果是 isMergedSlave, 指向其主合并单元格的坐标 */
  mergedMaster?: { rowIndex: number; colIndex: number };

  constructor(
    rowIndex: number,
    colIndex: number,
    width: number,
    height: number,
    initial?: Partial<CellDefinition>
  ) {
    this.rowIndex = rowIndex;
    this.colIndex = colIndex;
    this.width = width;
    this.height = height;
    Object.assign(this, initial);
    if (!this.style) this.style = new StyleDefinition();
    if (!this.content) this.content = new TextContent({ staticText: '' });
  }

  /**
   * 获取单元格的唯一键，用于 Map 等
   */
  get key(): string {
    return `${this.rowIndex}-${this.colIndex}`;
  }
}
